Computer systems utilize on-board ROM devices to provide the basic input/output system (“BIOS”) which enables the computer to boot by interacting with the hardware of the computer system and initializes the hardware for operation with software to be executed by the computer system including an operating system. In providing the initialization and interaction with hardware devices of the computer system, the ROM device includes a ROM image which is the set of information that is stored by the ROM device. The ROM image provides the BIOS boot code and various data modules to support the hardware devices. Typically, the ROM image is copied over to the random access memory (“RAM”) of the computer system so that the information of the ROM image may be accessed more quickly from the RAM than from the ROM device itself.
As the types of hardware devices to be supported by the ROM device continues to grow, the size of the ROM device must be able to grow as well to support the additional data modules that must be available. Typically, a computer system is limited to one ROM device to provide all of the necessary data modules, and conventionally, this single ROM device has been less than one megabyte in size. However, the number of hardware devices to be supported has increased so that one megabyte of ROM storage for the data modules is inadequate.
To address this problem, a ROM device may be utilized that is greater in size than one megabyte. However, the ROM device uses linked list pointers to provide the location of the data modules within the ROM device so that the BIOS code can find the modules as they are needed. These linked list pointers are stored in a well-known segment:offset format which became the standard format for linked list pointers for the x86 series of microprocessors. The segment:offset pointers were initially intended to be used by 16 bit microprocessors but processors now exceed this data width so that the segment:offset pointers stored by the ROM image are converted by the BIOS code to flat 32-bit pointers that work well with 32 bit processors.
Unfortunately, the segment:offset format is incapable of representing locations over the one megabyte ceiling for ROM devices. However, flat 32-bit pointers can represent locations over the one megabyte ceiling, but current BIOS codes intended for 32 bit processors are configured to perform a conversion on all linked list pointers of a ROM device where the intent of this conversion is to convert the segment:offset format to the flat 32-bit format. Segment:offset pointers cannot be abandoned altogether because of backward compatibility with existing software and hardware, so the BIOS code must remain capable of handling segment:offset pointers. But if the linked list pointers of the ROM image are already in flat 32-bit format, then the conversion process of the BIOS code results in faulty pointer values being returned. Thus, utilization of a ROM device greater than one megabyte to support the full spectrum of hardware devices has not been possible due to BIOS code configured exclusively for use and conversion of segment:offset format pointers.